ಕನ್ನಡ

Next.js 14 ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳಿಗಾಗಿ ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿ. ಫಾರ್ಮ್ ಹ್ಯಾಂಡ್ಲಿಂಗ್, ಡೇಟಾ ಮೌಲ್ಯೀಕರಣ, ಮತ್ತು ಭದ್ರತೆಯ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಕಲಿಯಿರಿ.

Next.js 14 ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳು: ಫಾರ್ಮ್ ಹ್ಯಾಂಡ್ಲಿಂಗ್‌ನ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಕರಗತ ಮಾಡಿಕೊಳ್ಳುವುದು

Next.js 14, ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಬಳಕೆದಾರ ಸ್ನೇಹಿ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಶಕ್ತಿಯುತ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ. ಇವುಗಳಲ್ಲಿ, ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳು ಫಾರ್ಮ್ ಸಲ್ಲಿಕೆಗಳು ಮತ್ತು ಡೇಟಾ ಮ್ಯುಟೇಷನ್‌ಗಳನ್ನು ನೇರವಾಗಿ ಸರ್ವರ್‌ನಲ್ಲಿ ನಿರ್ವಹಿಸುವ ಒಂದು ಪರಿವರ್ತನಾಶೀಲ ಮಾರ್ಗವಾಗಿವೆ. ಈ ಮಾರ್ಗದರ್ಶಿಯು Next.js 14 ರಲ್ಲಿ ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳ ಸಮಗ್ರ ಅವಲೋಕನವನ್ನು ಒದಗಿಸುತ್ತದೆ, ಫಾರ್ಮ್ ಹ್ಯಾಂಡ್ಲಿಂಗ್, ಡೇಟಾ ಮೌಲ್ಯೀಕರಣ, ಭದ್ರತೆ ಮತ್ತು ಸುಧಾರಿತ ತಂತ್ರಗಳಿಗಾಗಿ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸುತ್ತದೆ. ನಾವು ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳನ್ನು ಅನ್ವೇಷಿಸುತ್ತೇವೆ ಮತ್ತು ದೃಢವಾದ ಮತ್ತು ಸ್ಕೇಲೆಬಲ್ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ನಿರ್ಮಿಸಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುವಂತಹ ಕ್ರಿಯಾತ್ಮಕ ಒಳನೋಟಗಳನ್ನು ಒದಗಿಸುತ್ತೇವೆ.

Next.js ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳು ಎಂದರೇನು?

ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳು ಸರ್ವರ್‌ನಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಅಸಿಂಕ್ರೋನಸ್ ಫಂಕ್ಷನ್‌ಗಳಾಗಿವೆ ಮತ್ತು ಇವುಗಳನ್ನು ರಿಯಾಕ್ಟ್ ಕಾಂಪೊನೆಂಟ್‌ಗಳಿಂದ ನೇರವಾಗಿ ಕರೆಯಬಹುದು. ಫಾರ್ಮ್ ಸಲ್ಲಿಕೆಗಳು ಮತ್ತು ಡೇಟಾ ಮ್ಯುಟೇಷನ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಸಾಂಪ್ರದಾಯಿಕ API ರೂಟ್‌ಗಳ ಅಗತ್ಯವನ್ನು ಇವುಗಳು ನಿವಾರಿಸುತ್ತವೆ, ಇದರಿಂದಾಗಿ ಸರಳೀಕೃತ ಕೋಡ್, ಸುಧಾರಿತ ಭದ್ರತೆ ಮತ್ತು ಹೆಚ್ಚಿದ ಕಾರ್ಯಕ್ಷಮತೆ ಉಂಟಾಗುತ್ತದೆ. ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳು ರಿಯಾಕ್ಟ್ ಸರ್ವರ್ ಕಾಂಪೊನೆಂಟ್ಸ್ (RSCs) ಆಗಿದ್ದು, ಇವು ಸರ್ವರ್‌ನಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳ್ಳುವುದರಿಂದ, ವೇಗವಾದ ಆರಂಭಿಕ ಪುಟ ಲೋಡ್‌ಗಳು ಮತ್ತು ಸುಧಾರಿತ SEO ಗೆ ಕಾರಣವಾಗುತ್ತವೆ.

ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳ ಪ್ರಮುಖ ಪ್ರಯೋಜನಗಳು:

ನಿಮ್ಮ Next.js 14 ಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು ಸ್ಥಾಪಿಸುವುದು

ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳನ್ನು ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು, ನೀವು Next.js 14 ಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿದ್ದೀರಿ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. ನೀವು ಮೊದಲಿನಿಂದ ಪ್ರಾರಂಭಿಸುತ್ತಿದ್ದರೆ, ಈ ಕೆಳಗಿನ ಕಮಾಂಡ್ ಬಳಸಿ ಹೊಸ ಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು ರಚಿಸಿ:

npx create-next-app@latest my-next-app

ಸರ್ವರ್ ಕಾಂಪೊನೆಂಟ್ಸ್ ಮತ್ತು ಆಕ್ಷನ್‌ಗಳ ಸಂಪೂರ್ಣ ಪ್ರಯೋಜನವನ್ನು ಪಡೆಯಲು ನಿಮ್ಮ ಪ್ರಾಜೆಕ್ಟ್ app ಡೈರೆಕ್ಟರಿ ರಚನೆಯನ್ನು ಬಳಸುತ್ತಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.

ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳೊಂದಿಗೆ ಮೂಲಭೂತ ಫಾರ್ಮ್ ಹ್ಯಾಂಡ್ಲಿಂಗ್

ಒಂದು ಸರಳ ಉದಾಹರಣೆಯೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸೋಣ: ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿ ಹೊಸ ಐಟಂ ಅನ್ನು ರಚಿಸಲು ಡೇಟಾವನ್ನು ಸಲ್ಲಿಸುವ ಫಾರ್ಮ್. ನಾವು ಒಂದು ಇನ್‌ಪುಟ್ ಫೀಲ್ಡ್ ಮತ್ತು ಸಬ್ಮಿಟ್ ಬಟನ್ ಹೊಂದಿರುವ ಸರಳ ಫಾರ್ಮ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ.

ಉದಾಹರಣೆ: ಹೊಸ ಐಟಂ ಅನ್ನು ರಚಿಸುವುದು

ಮೊದಲಿಗೆ, ನಿಮ್ಮ ರಿಯಾಕ್ಟ್ ಕಾಂಪೊನೆಂಟ್‌ನಲ್ಲಿ ಸರ್ವರ್ ಆಕ್ಷನ್ ಫಂಕ್ಷನ್ ಅನ್ನು ಡಿಫೈನ್ ಮಾಡಿ. ಈ ಫಂಕ್ಷನ್ ಸರ್ವರ್‌ನಲ್ಲಿ ಫಾರ್ಮ್ ಸಲ್ಲಿಕೆಯ ತರ್ಕವನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ.

// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';

async function createItem(formData: FormData) {
  'use server'

  const name = formData.get('name') as string;

  // ಡೇಟಾಬೇಸ್ ಸಂವಹನವನ್ನು ಅನುಕರಿಸಿ
  console.log('Creating item:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // ಲೇಟೆನ್ಸಿಯನ್ನು ಅನುಕರಿಸಿ

  console.log('Item created successfully!');
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    await createItem(formData);
    setIsSubmitting(false);
  }

  return (
    
); }

ವಿವರಣೆ:

ಡೇಟಾ ಮೌಲ್ಯೀಕರಣ

ಡೇಟಾದ ಸಮಗ್ರತೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಮತ್ತು ಭದ್ರತಾ ದೋಷಗಳನ್ನು ತಡೆಗಟ್ಟಲು ಡೇಟಾ ಮೌಲ್ಯೀಕರಣವು ನಿರ್ಣಾಯಕವಾಗಿದೆ. ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳು ಸರ್ವರ್-ಸೈಡ್ ಮೌಲ್ಯೀಕರಣವನ್ನು ನಿರ್ವಹಿಸಲು ಉತ್ತಮ ಅವಕಾಶವನ್ನು ಒದಗಿಸುತ್ತವೆ. ಈ ವಿಧಾನವು ಕೇವಲ ಕ್ಲೈಂಟ್-ಸೈಡ್ ಮೌಲ್ಯೀಕರಣಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಅಪಾಯಗಳನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.

ಉದಾಹರಣೆ: ಇನ್‌ಪುಟ್ ಡೇಟಾವನ್ನು ಮೌಲ್ಯೀಕರಿಸುವುದು

ಮೌಲ್ಯೀಕರಣದ ತರ್ಕವನ್ನು ಸೇರಿಸಲು createItem ಸರ್ವರ್ ಆಕ್ಷನ್ ಅನ್ನು ಮಾರ್ಪಡಿಸಿ.

// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';

async function createItem(formData: FormData) {
  'use server'

  const name = formData.get('name') as string;

  if (!name || name.length < 3) {
    throw new Error('ಐಟಂ ಹೆಸರು ಕನಿಷ್ಠ 3 ಅಕ್ಷರಗಳಷ್ಟು ಉದ್ದವಿರಬೇಕು.');
  }

  // ಡೇಟಾಬೇಸ್ ಸಂವಹನವನ್ನು ಅನುಕರಿಸಿ
  console.log('Creating item:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // ಲೇಟೆನ್ಸಿಯನ್ನು ಅನುಕರಿಸಿ

  console.log('Item created successfully!');
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);
    try {
      await createItem(formData);
    } catch (error: any) {
      setErrorMessage(error.message || 'ದೋಷ ಸಂಭವಿಸಿದೆ.');
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    
{errorMessage &&

{errorMessage}

}
); }

ವಿವರಣೆ:

ಮೌಲ್ಯೀಕರಣ ಲೈಬ್ರರಿಗಳನ್ನು ಬಳಸುವುದು

ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾದ ಮೌಲ್ಯೀಕರಣ ಸನ್ನಿವೇಶಗಳಿಗಾಗಿ, ಈ ಕೆಳಗಿನಂತಹ ಮೌಲ್ಯೀಕರಣ ಲೈಬ್ರರಿಗಳನ್ನು ಬಳಸುವುದನ್ನು ಪರಿಗಣಿಸಿ:

Zod ಬಳಸಿ ಒಂದು ಉದಾಹರಣೆ ಇಲ್ಲಿದೆ:

// app/utils/validation.ts
import { z } from 'zod';

export const CreateItemSchema = z.object({
  name: z.string().min(3, 'ಐಟಂ ಹೆಸರು ಕನಿಷ್ಠ 3 ಅಕ್ಷರಗಳಷ್ಟು ಉದ್ದವಿರಬೇಕು.'),
});
// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';
import { CreateItemSchema } from '../utils/validation';

async function createItem(formData: FormData) {
  'use server'

  const name = formData.get('name') as string;

  const validatedFields = CreateItemSchema.safeParse({ name });

  if (!validatedFields.success) {
    return { errors: validatedFields.error.flatten().fieldErrors };
  }

  // ಡೇಟಾಬೇಸ್ ಸಂವಹನವನ್ನು ಅನುಕರಿಸಿ
  console.log('Creating item:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // ಲೇಟೆನ್ಸಿಯನ್ನು ಅನುಕರಿಸಿ

  console.log('Item created successfully!');
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);
    try {
      await createItem(formData);
    } catch (error: any) {
      setErrorMessage(error.message || 'ದೋಷ ಸಂಭವಿಸಿದೆ.');
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    
{errorMessage &&

{errorMessage}

}
); }

ವಿವರಣೆ:

ಭದ್ರತಾ ಪರಿಗಣನೆಗಳು

ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳು ಸರ್ವರ್‌ನಲ್ಲಿ ಕೋಡ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮೂಲಕ ಭದ್ರತೆಯನ್ನು ಹೆಚ್ಚಿಸುತ್ತವೆ, ಆದರೆ ಸಾಮಾನ್ಯ ಬೆದರಿಕೆಗಳಿಂದ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ರಕ್ಷಿಸಲು ಭದ್ರತೆಯ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಅನುಸರಿಸುವುದು ಇನ್ನೂ ನಿರ್ಣಾಯಕವಾಗಿದೆ.

ಕ್ರಾಸ್-ಸೈಟ್ ರಿಕ್ವೆಸ್ಟ್ ಫೋರ್ಜರಿ (CSRF) ತಡೆಗಟ್ಟುವುದು

CSRF ದಾಳಿಗಳು ಬಳಕೆದಾರರ ಬ್ರೌಸರ್‌ನಲ್ಲಿ ವೆಬ್‌ಸೈಟ್ ಹೊಂದಿರುವ ನಂಬಿಕೆಯನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತವೆ. CSRF ದಾಳಿಗಳನ್ನು ತಡೆಗಟ್ಟಲು, CSRF ರಕ್ಷಣಾ ಕಾರ್ಯವಿಧಾನಗಳನ್ನು ಅಳವಡಿಸಿ.

Next.js ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳನ್ನು ಬಳಸುವಾಗ CSRF ರಕ್ಷಣೆಯನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ. ಈ ಫ್ರೇಮ್‌ವರ್ಕ್ ಪ್ರತಿ ಫಾರ್ಮ್ ಸಲ್ಲಿಕೆಗಾಗಿ CSRF ಟೋಕನ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ ಮತ್ತು ಮೌಲ್ಯೀಕರಿಸುತ್ತದೆ, ವಿನಂತಿಯು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ ಬಂದಿದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.

ಬಳಕೆದಾರರ ದೃಢೀಕರಣ ಮತ್ತು ಅಧಿಕಾರವನ್ನು ನಿರ್ವಹಿಸುವುದು

ಅಧಿಕೃತ ಬಳಕೆದಾರರು ಮಾತ್ರ ನಿರ್ದಿಷ್ಟ ಕ್ರಿಯೆಗಳನ್ನು ನಿರ್ವಹಿಸಬಹುದೆಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. ಸೂಕ್ಷ್ಮ ಡೇಟಾ ಮತ್ತು ಕಾರ್ಯಗಳನ್ನು ರಕ್ಷಿಸಲು ದೃಢೀಕರಣ ಮತ್ತು ಅಧಿಕಾರ ಕಾರ್ಯವಿಧಾನಗಳನ್ನು ಅಳವಡಿಸಿ.

ಸರ್ವರ್ ಆಕ್ಷನ್ ಅನ್ನು ರಕ್ಷಿಸಲು NextAuth.js ಬಳಸುವ ಒಂದು ಉದಾಹರಣೆ ಇಲ್ಲಿದೆ:

// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';
import { getServerSession } from 'next-auth';
import { authOptions } from '../../app/api/auth/[...nextauth]/route';

async function createItem(formData: FormData) {
  'use server'

  const session = await getServerSession(authOptions);

  if (!session) {
    throw new Error('ಅನಧಿಕೃತ');
  }

  const name = formData.get('name') as string;

  // ಡೇಟಾಬೇಸ್ ಸಂವಹನವನ್ನು ಅನುಕರಿಸಿ
  console.log('Creating item:', name, 'by user:', session.user?.email);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // ಲೇಟೆನ್ಸಿಯನ್ನು ಅನುಕರಿಸಿ

  console.log('Item created successfully!');
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);
    try {
      await createItem(formData);
    } catch (error: any) {
      setErrorMessage(error.message || 'ದೋಷ ಸಂಭವಿಸಿದೆ.');
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    
{errorMessage &&

{errorMessage}

}
); }

ವಿವರಣೆ:

ಇನ್‌ಪುಟ್ ಡೇಟಾವನ್ನು ಸ್ಯಾನಿಟೈಸ್ ಮಾಡುವುದು

ಕ್ರಾಸ್-ಸೈಟ್ ಸ್ಕ್ರಿಪ್ಟಿಂಗ್ (XSS) ದಾಳಿಗಳನ್ನು ತಡೆಗಟ್ಟಲು ಇನ್‌ಪುಟ್ ಡೇಟಾವನ್ನು ಸ್ಯಾನಿಟೈಸ್ ಮಾಡಿ. ದುರುದ್ದೇಶಪೂರಿತ ಕೋಡ್ ಅನ್ನು ವೆಬ್‌ಸೈಟ್‌ಗೆ ಸೇರಿಸಿದಾಗ XSS ದಾಳಿಗಳು ಸಂಭವಿಸುತ್ತವೆ, ಇದು ಬಳಕೆದಾರರ ಡೇಟಾ ಅಥವಾ ಅಪ್ಲಿಕೇಶನ್ ಕಾರ್ಯವನ್ನು ರಾಜಿ ಮಾಡಬಹುದು.

ನಿಮ್ಮ ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳಲ್ಲಿ ಬಳಕೆದಾರ-ಒದಗಿಸಿದ ಇನ್‌ಪುಟ್ ಅನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವ ಮೊದಲು ಅದನ್ನು ಸ್ಯಾನಿಟೈಸ್ ಮಾಡಲು DOMPurify ಅಥವಾ sanitize-html ನಂತಹ ಲೈಬ್ರರಿಗಳನ್ನು ಬಳಸಿ.

ಸುಧಾರಿತ ತಂತ್ರಗಳು

ಈಗ ನಾವು ಮೂಲಭೂತ ಅಂಶಗಳನ್ನು ಚರ್ಚಿಸಿದ್ದೇವೆ, ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸಲು ಕೆಲವು ಸುಧಾರಿತ ತಂತ್ರಗಳನ್ನು ಅನ್ವೇಷಿಸೋಣ.

ಆಶಾವಾದಿ ಅಪ್‌ಡೇಟ್‌ಗಳು

ಆಶಾವಾದಿ ಅಪ್‌ಡೇಟ್‌ಗಳು, ಸರ್ವರ್ ದೃಢೀಕರಿಸುವ ಮೊದಲೇ ಕ್ರಿಯೆಯು ಯಶಸ್ವಿಯಾಗುತ್ತದೆ ಎಂಬಂತೆ UI ಅನ್ನು ತಕ್ಷಣವೇ ನವೀಕರಿಸುವ ಮೂಲಕ ಉತ್ತಮ ಬಳಕೆದಾರ ಅನುಭವವನ್ನು ಒದಗಿಸುತ್ತವೆ. ಸರ್ವರ್‌ನಲ್ಲಿ ಕ್ರಿಯೆಯು ವಿಫಲವಾದರೆ, UI ಅನ್ನು ಅದರ ಹಿಂದಿನ ಸ್ಥಿತಿಗೆ ಹಿಂತಿರುಗಿಸಲಾಗುತ್ತದೆ.

// app/components/UpdateItemForm.tsx
'use client';

import { useState } from 'react';

async function updateItem(id: string, formData: FormData) {
  'use server'

  const name = formData.get('name') as string;

  // ಡೇಟಾಬೇಸ್ ಸಂವಹನವನ್ನು ಅನುಕರಿಸಿ
  console.log('Updating item:', id, 'with name:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // ಲೇಟೆನ್ಸಿಯನ್ನು ಅನುಕರಿಸಿ

  // ವೈಫಲ್ಯವನ್ನು ಅನುಕರಿಸಿ (ಪ್ರದರ್ಶನ ಉದ್ದೇಶಗಳಿಗಾಗಿ)
  const shouldFail = Math.random() < 0.5;
  if (shouldFail) {
    throw new Error('ಐಟಂ ಅನ್ನು ನವೀಕರಿಸಲು ವಿಫಲವಾಗಿದೆ.');
  }

  console.log('Item updated successfully!');
  return { name }; // ನವೀಕರಿಸಿದ ಹೆಸರನ್ನು ಹಿಂತಿರುಗಿಸಿ
}

export default function UpdateItemForm({ id, initialName }: { id: string; initialName: string }) {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  const [itemName, setItemName] = useState(initialName);

  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);

    // UI ಅನ್ನು ಆಶಾವಾದಿಯಾಗಿ ನವೀಕರಿಸಿ
    const newName = formData.get('name') as string;
    setItemName(newName);

    try {
      const result = await updateItem(id, formData);
      // ಯಶಸ್ವಿಯಾದರೆ, ನವೀಕರಣವು ಈಗಾಗಲೇ setItemName ಮೂಲಕ UI ನಲ್ಲಿ ಪ್ರತಿಫಲಿಸುತ್ತದೆ

    } catch (error: any) {
      setErrorMessage(error.message || 'ದೋಷ ಸಂಭವಿಸಿದೆ.');
      // ದೋಷದ ಮೇಲೆ UI ಅನ್ನು ಹಿಂತಿರುಗಿಸಿ
      setItemName(initialName);
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    

ಪ್ರಸ್ತುತ ಹೆಸರು: {itemName}

{errorMessage &&

{errorMessage}

}
); }

ವಿವರಣೆ:

ಡೇಟಾವನ್ನು ಮರುಮೌಲ್ಯೀಕರಿಸುವುದು

ಸರ್ವರ್ ಆಕ್ಷನ್ ಡೇಟಾವನ್ನು ಮಾರ್ಪಡಿಸಿದ ನಂತರ, UI ಇತ್ತೀಚಿನ ಬದಲಾವಣೆಗಳನ್ನು ಪ್ರತಿಬಿಂಬಿಸುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ನೀವು ಕ್ಯಾಶ್ ಮಾಡಿದ ಡೇಟಾವನ್ನು ಮರುಮೌಲ್ಯೀಕರಿಸಬೇಕಾಗಬಹುದು. Next.js ಡೇಟಾವನ್ನು ಮರುಮೌಲ್ಯೀಕರಿಸಲು ಹಲವಾರು ಮಾರ್ಗಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ:

ಹೊಸ ಐಟಂ ಅನ್ನು ರಚಿಸಿದ ನಂತರ ಪಾತ್ ಅನ್ನು ಮರುಮೌಲ್ಯೀಕರಿಸುವ ಒಂದು ಉದಾಹರಣೆ ಇಲ್ಲಿದೆ:

// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';
import { revalidatePath } from 'next/cache';

async function createItem(formData: FormData) {
  'use server'

  const name = formData.get('name') as string;

  // ಡೇಟಾಬೇಸ್ ಸಂವಹನವನ್ನು ಅನುಕರಿಸಿ
  console.log('Creating item:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // ಲೇಟೆನ್ಸಿಯನ್ನು ಅನುಕರಿಸಿ

  console.log('Item created successfully!');

  revalidatePath('/items'); // /items ಪಾತ್ ಅನ್ನು ಮರುಮೌಲ್ಯೀಕರಿಸಿ
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);
    try {
      await createItem(formData);
    } catch (error: any) {
      setErrorMessage(error.message || 'ದೋಷ ಸಂಭವಿಸಿದೆ.');
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    
{errorMessage &&

{errorMessage}

}
); }

ವಿವರಣೆ:

ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳಿಗಾಗಿ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು

ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳ ಪ್ರಯೋಜನಗಳನ್ನು ಗರಿಷ್ಠಗೊಳಿಸಲು, ಈ ಕೆಳಗಿನ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಪರಿಗಣಿಸಿ:

ಸಾಮಾನ್ಯ ಅಪಾಯಗಳು ಮತ್ತು ಅವುಗಳನ್ನು ತಪ್ಪಿಸುವುದು ಹೇಗೆ

ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳು ಹಲವಾರು ಪ್ರಯೋಜನಗಳನ್ನು ನೀಡುತ್ತವೆಯಾದರೂ, ತಿಳಿದಿರಬೇಕಾದ ಕೆಲವು ಸಾಮಾನ್ಯ ಅಪಾಯಗಳಿವೆ:

ತೀರ್ಮಾನ

Next.js 14 ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳು ಫಾರ್ಮ್ ಸಲ್ಲಿಕೆಗಳು ಮತ್ತು ಡೇಟಾ ಮ್ಯುಟೇಷನ್‌ಗಳನ್ನು ನೇರವಾಗಿ ಸರ್ವರ್‌ನಲ್ಲಿ ನಿರ್ವಹಿಸಲು ಒಂದು ಶಕ್ತಿಯುತ ಮತ್ತು ಸಮರ್ಥ ಮಾರ್ಗವನ್ನು ಒದಗಿಸುತ್ತವೆ. ಈ ಮಾರ್ಗದರ್ಶಿಯಲ್ಲಿ ವಿವರಿಸಲಾದ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಅನುಸರಿಸುವ ಮೂಲಕ, ನೀವು ದೃಢವಾದ, ಸುರಕ್ಷಿತ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ನಿರ್ಮಿಸಬಹುದು. ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಸರಳಗೊಳಿಸಲು, ಭದ್ರತೆಯನ್ನು ಹೆಚ್ಚಿಸಲು ಮತ್ತು ಒಟ್ಟಾರೆ ಬಳಕೆದಾರ ಅನುಭವವನ್ನು ಸುಧಾರಿಸಲು ಸರ್ವರ್ ಆಕ್ಷನ್‌ಗಳನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳಿ. ನೀವು ಈ ತತ್ವಗಳನ್ನು ಸಂಯೋಜಿಸುವಾಗ, ನಿಮ್ಮ ಅಭಿವೃದ್ಧಿ ಆಯ್ಕೆಗಳ ಜಾಗತಿಕ ಪ್ರಭಾವವನ್ನು ಪರಿಗಣಿಸಿ. ನಿಮ್ಮ ಫಾರ್ಮ್‌ಗಳು ಮತ್ತು ಡೇಟಾ ನಿರ್ವಹಣಾ ಪ್ರಕ್ರಿಯೆಗಳು ವೈವಿಧ್ಯಮಯ ಅಂತರರಾಷ್ಟ್ರೀಯ ಪ್ರೇಕ್ಷಕರಿಗೆ ಪ್ರವೇಶಿಸಬಹುದಾದ, ಸುರಕ್ಷಿತ ಮತ್ತು ಬಳಕೆದಾರ ಸ್ನೇಹಿಯಾಗಿವೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. ಒಳಗೊಳ್ಳುವಿಕೆಗೆ ಈ ಬದ್ಧತೆಯು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ನ ಉಪಯುಕ್ತತೆಯನ್ನು ಸುಧಾರಿಸುವುದಲ್ಲದೆ, ಜಾಗತಿಕ ಮಟ್ಟದಲ್ಲಿ ಅದರ ವ್ಯಾಪ್ತಿ ಮತ್ತು ಪರಿಣಾಮಕಾರಿತ್ವವನ್ನು ವಿಸ್ತರಿಸುತ್ತದೆ.